草庐IT

c++ - AMQP C++ 实现

全部标签

c++ - 与 VS2013 相比,gcc 4.7.2 中的 std::map 实现效率非常低?

有人可以帮我理解std::map容器是如何实现的吗?我有一个包含原子成员的类,我不需要调用复制构造函数,所以我使用c++11delete运算符来抑制复制构造函数的隐式生成。MyCalss(constMyClass&a)=delete;这在我的Windows构建中运行良好,但是在Linux中,我收到一条错误消息,通知我std::map类的[]运算符正在尝试调用已删除的函数。在WindowsVS2013和LinuxGCC4.7.xmap实现之间似乎存在重大差异。这促使我做了一个关于如何将对象插入map的实验。我写了这个小示例程序:#include#include#include#inclu

c - GetOverlappedResult(bWait=TRUE) 与 WaitForSingleObject() 对于重叠 I/O

当我在Win32api上以OVERLAPPED方式打开和读取文件时,我有几种方法来完成IO请求,包括使用等待文件句柄(或重叠结构中的事件)WaitForSingleObjectGetOverlappedResult和bWait=TRUE这两个函数似乎具有相同的效果:线程停止直到句柄或事件发出信号,这意味着数据被放置在提供给ReadFile的缓冲区中。那么,有什么区别呢?为什么我需要GetOverlappedResult? 最佳答案 我完全同意RemusRusanuanswer.也改为创建自己的IOCP和线程池,它们将在此IOCP上监

linux - 使用硬件定时器是实现进程调度的唯一方法吗?

我读到操作系统使用以下方法实现调度:CPU必须有一个硬件定时器,每X次触发一次中断毫秒。一旦定时器中断触发,定时器中断处理程序将执行使CPU开始执行另一个进程的指令(或者我想我应该说的另一个线程)。我的问题是:我刚才描述的方法是实现调度的唯一方法吗? 最佳答案 没有。基本上有两种在操作系统中实现多线程的基本方法:1)抢先式多任务处理通过抢占式多任务处理,您可以使用中断源来触发任务切换。大多数情况下,人们会在定时器ISR(中断服务例程)内进行任务切换,以防执行长时间运行的任务并且没有发生其他硬件事件。万一发生了其他硬件事件,还可以进行

C - Windows 和 Unix 上的可移植代码

我正在创建一个程序,我希望它在Windows和UNIX上运行。然而,我使用了很多特定于Windows或Unix的函数。例如位于#include中的函数和#include对于UNIX和#include和#include适用于Windows。我让它们独立工作,但我想将它们合并在一起。这是一个例子:structtimespecstart,end;//UNIXcodeLARGE_INTEGERclockFrequency;//WindowscodeQueryPerformanceFrequency(&clockFrequency);LARGE_INTEGERstartTime;LARGE_IN

c++ - std::chrono::system_time 的 Visual Studio 2017 CRT 实现使用什么时钟?

chrono标题中的注释只是说//wrapsGetSystemTimePreciseAsFileTime/GetSystemTimeAsFileTime但它实际使用的是什么(即我期望的精度是多少)?该实现调用_Xtime_get_ticks,但该函数是不透明的。 最佳答案 CRT在可用时调用GetSystemTimePreciseAsFileTime,否则调用GetSystemTimeAsFileTime。GetSystemTimePreciseAsFileTime为您提供highestpossiblelevelofprecisio

c - 读取未格式化的数据

在C中,使用标准WindowsAPI,读取未格式化磁盘的最佳方法是什么?具体来说,我有一个MMC或SDcard有数据,但没有文件系统(不是FAT16,不是FAT32,只是原始数据)。如果有一种简单的方法可以打开整个卡进行逐字节二进制访问,那就太好了。谢谢! 最佳答案 我会去HANDLEdrive=CreateFile(_T("\\.\PhysicalDrive0"),GENERIC_READ,FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0);//errorhandlingDWORDbr=0;DISK_GEO

c++ - 单个文件上两个 C FILE* 流的一致性

我需要为来自网络套接字的大量数据实现一个简单的“溢出到磁盘”层。我希望有两个CFILE*流,一个由写入文件的后台线程使用,一个由读取文件的前端线程使用。这两个流是这样的,一个线程可以在一个偏移处写入,而另一个线程可以在其他位置读取-无需锁定并阻塞另一个线程。将有一个分页机制,因此读/写是在随机访问位置-不一定是顺序的。还有一个警告,这需要在Windows和Linux上运行。问题:在对第一个流的fwrite返回后,写入的数据是否保证对第二个流上的fread立即可见?如果没有,我还可以考虑其他哪些选择?Posixpread/pwrite函数原来是我所需要的。这是Win32的版本:size_

c - HANDLE - 文件句柄和目录句柄结构

语言:C操作系统:Windows我的应用程序是用nt级别的api构建的,必须操作文件和目录句柄。在Zwopenfile或zwcreate文件上,我得到一个HANDLE作为结果。通常HANDLE的值类似于0x00000024、28,2c...等。当我将其转换为LPBYTE以查看内容时。VisualStudio显示“无法评估表达式”。我了解到从创建/打开文件api返回的HANDLE不是指向内存位置的指针。但是,Windows使用该值并执行文件操作。Ntquerydirectory对象为我提供了有关句柄的信息。然而,Windows是如何实现这个功能的还不得而知。任何人都可以阐明它。

Python 包装器到 C 回调

尝试创建一个需要在调用C回调时调用的python回调来自Windows环境中的dll。请查看下面的代码以了解问题。fromctypesimport*#---------qsortCallback-------------#IntArray5=c_int*5ia=IntArray5(5,1,7,33,99)libc=cdll.msvcrtqsort=libc.qsortqsort.restype=NoneCMPFUNC=CFUNCTYPE(c_int,POINTER(c_int),POINTER(c_int))test=0defpy_cmp_func(a,b):#print'py_cmp

c - 你如何以可重入的方式 InitializeCriticalSection?

我正在修改一个完全可重入的库以添加Windows支持。问题是初始化函数。初始化函数包含在MUTEX_LOCK(&ssl_lock);和MUTEX_UNLOCK(&ssl_lock);中,以确保所有内容仅初始化一次。问题是我无法在InitializeCriticalSection之前调用EnterCriticalSection并且InitializeCriticalSection不可重入。我该如何解决这个问题? 最佳答案 根据您需要支持的Windows版本,您可以使用“InitOnce”API:One-TimeInitializati